﻿// Type: Crystalbyte.Equinox.Imap.ImapClient
// Assembly: Crystalbyte.Equinox.Imap, Version=0.4.4493.24531, Culture=neutral, PublicKeyToken=null
// Assembly location: C:\Experiments\TFSAzure\FetchAndProcess\Common\ThirdPartyLibs\Release\Crystalbyte.Equinox.Imap.dll

using Crystalbyte.Equinox;
using Crystalbyte.Equinox.Imap.Commands;
using Crystalbyte.Equinox.Imap.Responses;
using Crystalbyte.Equinox.Security;
using Crystalbyte.Equinox.Security.Authentication;
using System;
using System.Linq;
using System.Net;

namespace Crystalbyte.Equinox.Imap
{
    public sealed class ImapClient : SecureClient
    {
        protected override void FetchCapabilities();
        protected override bool IsTlsSupported();
        protected override bool IssueStartTlsCommand(string host);
        public ImapResponseReader SendAndReceive(ImapCommand command, bool processStatusUpdatesAutomatically = true);
        public ImapResponseReader Receive(bool processStatusUpdatesAutomatically = true);
        public void Send(ImapCommand command);
        public void SendAsync(ImapCommand command);
        public bool AuthenticateXOAuth(string key);
        public bool Authenticate(string username, string password, SaslMechanics mechanic = default(SaslMechanics));
        public bool Authenticate(NetworkCredential credentials, SaslMechanics mechanic = default(SaslMechanics));
        public SelectExamineImapResponse Examine(string mailboxName);
        public ImapResponse Close(string mailboxName);
        public SearchImapResponse Search(string query, bool isUidSearch = false);
        public ImapResponse Check();
        public SelectExamineImapResponse Select(string mailboxName);
        public ExpungeImapResponse Expunge();
        public ImapResponse Delete(string mailboxName);
        public StoreImapResponse Store(SequenceSet set, string value, StoreProcedures procedure);
        public StoreImapResponse Store(SequenceSet set, MessageFlags flags, StoreProcedures procedure);
        public ImapResponse StoreSilent(SequenceSet set, MessageFlags flags, StoreProcedures procedure);
        public ImapResponse StoreSilent(SequenceSet set, string value, StoreProcedures procedure);
        public ImapResponse Noop();
        public ImapResponse Copy(SequenceSet set, string destinationMailboxName);
        public ImapResponse Subscribe(string mailboxName);
        public ImapResponse Unsubscribe(string mailboxName);
        public ImapResponse Logout();
        public ImapResponse Create(string mailboxName);
        public ImapResponse Rename(string sourceName, string targetName);
        public ImapResponse Append(string mailboxName, Message message, MessageFlags flags = default(MessageFlags));
        public FetchImapResponse Fetch(SequenceSet set, string query);
        public ListImapResponse List(string referenceName, string wildcardedMailboxName);
        public ListImapResponse LSub(string referenceName, string wildcardedMailboxName);
        public override void Dispose();
        public void StartIdle();
        public void StopIdleAsync();
        public Message FetchMessageBySequenceNumber(int sn);
        public Message FetchMessageByUid(int uid);
        public Attachment FetchAttachment(AttachmentInfo info);
        public Message FetchNestedMessage(MessageInfo info);
        public View FetchView(ViewInfo info);
        public ImapServerCapability ServerCapability { get; }
        public IQueryable<IMessageQueryable> Messages { get; }
        public bool IsAuthenticated { get; internal set; }
        public bool UsePeek { get; set; }
        public TimeSpan ResponseTimeout { get; set; }
        public string SelectedMailbox { get; }
        public bool IsIdling { get; }
        public event EventHandler<Crystalbyte.Equinox.Imap.DownloadProgressChangedEventArgs> DownloadProgressChanged;
        public event EventHandler<ManualSaslAuthenticationRequiredEventArgs> ManualSaslAuthenticationRequired;
        public event EventHandler<StatusUpdateReceivedEventArgs> StatusUpdateReceived;
    }
}
